home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / Dave Mark / Mac C Primer 1 (SC++7) / 7.01 - ResWriter / ResWriter.c next >
Encoding:
C/C++ Source or Header  |  1994-04-27  |  3.1 KB  |  143 lines  |  [TEXT/KAHL]

  1. /********************************************************/
  2. /*                                                        */
  3. /*  ResWriter Code from Chapter Seven of                */
  4. /*                                                        */
  5. /*    *** The Macintosh Programming Primer, 2nd Ed. ***    */
  6. /*                                                      */
  7. /*    Copyright 1992, Dave Mark and Cartwright Reed       */
  8. /*                                                        */
  9. /********************************************************/
  10.  
  11. #define kBaseResID            128
  12. #define kMoveToFront        (WindowPtr)-1L
  13.  
  14. #define iText                4
  15.  
  16. #define kDisableButton        255
  17. #define kEnableButton        0
  18.  
  19. #define kWriteTextOut        true
  20. #define kDontWriteTextOut    false
  21.  
  22. #define kMinTextPosition    0
  23. #define kMaxTextPosition    32767
  24.  
  25.  
  26. /***************/
  27. /*  Functions  */
  28. /***************/
  29.  
  30. void    ToolBoxInit( void );
  31. Boolean    DoTextDialog( StringHandle oldTextHandle );
  32.  
  33.  
  34. /*pascal OSErr SetDialogDefaultItem(DialogPtr theDialog, short newItem) 
  35.     = { 0x303C, 0x0304, 0xAA68 };        
  36. pascal OSErr SetDialogCancelItem(DialogPtr theDialog, short newItem)
  37.     = { 0x303C, 0x0305, 0xAA68 };
  38. pascal OSErr SetDialogTracksCursor(DialogPtr theDialog, Boolean tracks)
  39.     = { 0x303C, 0x0306, 0xAA68 };*/
  40.  
  41.  
  42. /**************************** main **********************/
  43.  
  44. void    main( void )
  45. {
  46.     StringHandle    textHandle;
  47.     
  48.     ToolBoxInit();
  49.     
  50.     textHandle = GetString( kBaseResID );
  51.     
  52.     if ( textHandle == nil )
  53.     {
  54.         SysBeep( 20 );
  55.         ExitToShell();
  56.     }
  57.     
  58.     if ( DoTextDialog( textHandle ) == kWriteTextOut )
  59.     {
  60.         ChangedResource( (Handle)textHandle );
  61.         WriteResource( (Handle)textHandle );
  62.     }
  63. }
  64.  
  65.  
  66. /****************** ToolBoxInit *********************/
  67.  
  68. void    ToolBoxInit( void )
  69. {
  70.     InitGraf( &qd.thePort );
  71.     InitFonts();
  72.     InitWindows();
  73.     InitMenus();
  74.     TEInit();
  75.     InitDialogs( 0L );
  76.     InitCursor();
  77. }
  78.  
  79.  
  80. /****************** DoTextDialog *********************/
  81.  
  82. Boolean    DoTextDialog( StringHandle textHandle )
  83. {
  84.     DialogPtr        dialog;
  85.     Boolean            done;
  86.     short            itemHit, itemType;
  87.     Handle            OKItemHandle, textItemHandle;
  88.     Rect            itemRect;
  89.     Str255            itemText;
  90.     
  91.     dialog = GetNewDialog( kBaseResID, nil, kMoveToFront );
  92.     
  93.     GetDItem( dialog, ok, &itemType, &OKItemHandle, &itemRect );
  94.     GetDItem( dialog, iText, &itemType, &textItemHandle, &itemRect );
  95.     
  96.     HLock( (Handle)textHandle );
  97.     SetIText( textItemHandle, *textHandle );
  98.     HUnlock( (Handle)textHandle );
  99.     
  100.     SelIText( dialog, iText, kMinTextPosition, kMaxTextPosition );
  101.     
  102.     ShowWindow( dialog );
  103.     SetPort( dialog );
  104.     
  105.     SetDialogDefaultItem( dialog, ok );
  106.     SetDialogCancelItem( dialog, cancel );
  107.     SetDialogTracksCursor( dialog, true );
  108.     
  109.     done = false;
  110.     while ( ! done )
  111.     {
  112.         GetIText( textItemHandle, itemText );
  113.         
  114.         if ( itemText[ 0 ] == 0 )
  115.             HiliteControl( (ControlHandle)OKItemHandle, kDisableButton );
  116.         else
  117.             HiliteControl( (ControlHandle)OKItemHandle, kEnableButton );
  118.             
  119.         ModalDialog( nil, &itemHit );
  120.         
  121.         done = ( (itemHit == ok) || (itemHit == cancel) );
  122.     }
  123.     
  124.     if ( itemHit == ok )
  125.     {
  126.         GetIText( textItemHandle, itemText );
  127.         SetHandleSize( (Handle)textHandle, (Size)(itemText[ 0 ] + 1) );
  128.         
  129.         HLock( (Handle)textHandle );
  130.         GetIText( textItemHandle, *textHandle );
  131.         HUnlock( (Handle)textHandle );
  132.     
  133.         DisposDialog( dialog );
  134.         
  135.         return( kWriteTextOut );
  136.     }
  137.     else
  138.     {
  139.         DisposDialog( dialog );
  140.         
  141.         return( kDontWriteTextOut );
  142.     }
  143. }